package com.bb.flow.parser.impl.parsejson.parsenode.nodeimp;

import com.bb.flow.config.AbstractConfigNode;
import com.bb.flow.parser.impl.parsejson.parsenode.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * @author bigbeard
 * 节点解析抽象类
 */
public abstract class AbstractNodeImp implements IParseNode {

    protected final Logger logger = LoggerFactory.getLogger(this.getClass());
    /**
     * 节点基本信息解析器
     */
    protected ParseNodeBaseInfo parseNodeBaseInfo;

    /**
     * 类信息解析器
     */
    protected ParseClassInfo parseClassInfo;
    /**
     * 节点解析调度器
     */
    protected ParseNodeDispatcher nodeDispatcher;
    /**
     * 条件解析器
     */
    protected ParseCondition parseCondition;


    /**
     * @param parseClassInfo 解析器
     */
    @Override
    public void setParseClassInfo(ParseClassInfo parseClassInfo) {
        this.parseClassInfo = parseClassInfo;
    }

    /**
     * 节点基本信息解析器
     *
     * @param parseNodeBaseInfo 解析器
     */
    @Override
    public void setParseNodeBaseInfo(ParseNodeBaseInfo parseNodeBaseInfo) {
        this.parseNodeBaseInfo = parseNodeBaseInfo;
    }

    /**
     * 节点解析调度器
     *
     * @param parseNodeDispatcher 节点解析调度器
     */
    @Override
    public void setNodeDispatcher(ParseNodeDispatcher parseNodeDispatcher) {
        this.nodeDispatcher = parseNodeDispatcher;
    }

    /**
     * 条件解析器
     *
     * @param parseCondition 条件解析器
     */
    @Override
    public void setParseCondition(ParseCondition parseCondition) {
        this.parseCondition = parseCondition;
    }

    /**
     * 获取节点名称,会拼接
     *
     * @param parentNodeName 父级节点名称
     * @param node           当前节点
     * @return 节点名称
     */
    protected String getNodeKey(String parentNodeName, AbstractConfigNode node) {
        String nodeKey;
        if (null == parentNodeName) {
            nodeKey = node.getNodeKey();
        } else {
            nodeKey = parentNodeName + "/" + node.getNodeKey();
        }
        return nodeKey;
    }
}
